/*
 * 版权所有 (c) 2022-2099 TBIT。保留所有权利。
 */

package com.tbit.uqbike.webmanager.dao.core;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tbit.uqbike.object.pojo.DetentionMachineBound;
import com.tbit.uqbike.object.pojo.Machine;
import com.tbit.uqbike.object.pojo.vo.DetentionMachineBoundVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
/**
 * 扣押设备绑定 Mapper 接口
 *
 * @author chen
 * @since 2023-02-08
 */
public interface DetentionMachineBoundMapper extends BaseMapper<DetentionMachineBound> {


    List<DetentionMachineBoundVO> selectByDetentionId(@Param("detentionId") Integer detentionId, @Param("accountId") Integer accountId);


    void deleteByMachineId(@Param("machineId") Integer machineId);

    /**
     * 根据扣押区id和区域id移除扣押车辆
     *
     * @param accountId   区域id
     * @param detentionId 扣押区id
     * @param machineId   车辆id
     */
    void deleteByDetentionIdAndMachineId(@Param("accountId") Integer accountId, @Param("detentionId") Integer detentionId,
                                         @Param("machineId") Integer machineId);

    /**
     * 根据扣押区id和区域id查询扣押车辆
     *
     * @param detentionId 扣押区id
     * @param accountId   区域id
     * @param userCode    车辆编号
     */
    List<DetentionMachineBoundVO> queryPage(@Param("detentionId") Integer detentionId, @Param("accountId") Integer accountId,
                                            @Param("userCode") String userCode);

    /**
     * 根据扣区域id和车辆编号集合搜索扣押车辆
     *
     * @param accountId    区域id
     * @param userCodeList 车辆编号集合
     */
    List<DetentionMachineBoundVO> selectByAccountIdAndUserCodeList(@Param("accountId") Integer accountId,
                                                                   @Param("userCodeList") List<String> userCodeList);

    /**
     * 根据扣押区id和区域id批量添加扣押车辆
     *
     * @param accountId   区域id
     * @param detentionId 扣押区id
     * @param machineList 车辆集合
     * @param addTime     扣押时间
     */
    int batchAddDetentionMachine(@Param("accountId") Integer accountId, @Param("detentionId") Integer detentionId,
                                 @Param("machineList") List<Machine> machineList, @Param("userId") Integer userId,
                                 @Param("addTime") Date addTime, @Param("detentionName") String detentionName);

    /**
     * 根据扣区域id,扣押区id和车辆编号集合搜索扣押车辆
     *
     * @param accountId   区域id
     * @param detentionId 扣押区id
     * @param userCodeList    车辆编号集合
     */
    List<DetentionMachineBoundVO> selectByDetentionIdAndUserCodeList(@Param("accountId") Integer accountId,
                                                                     @Param("detentionId") Integer detentionId,
                                                                     @Param("userCodeList") List<String> userCodeList);

    List<Integer> selectMachineIdByAccountId(Integer accountId);
}
